package a00_LeetCode.Queue;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @Author quan
 * @Description 单队列实现栈
 * @Date 2023/3/23 17:08
 */
public class Num225_MyStackByOneQueue {
    /**
     * 思路：让新元素先入队列，然后将原先存储的旧元素依次出队列再重新入队列，此时的顺序就符合栈的出栈特点
     * 其中要注意的是：这个旧元素有几个就要出几次栈。所以用一个值记录queue队列中的值，之后的出栈次数也就是该值。     */
    private Queue<Integer> queue = new LinkedList<>();
    public void push(int x) {
        // 记录队列中的元素个数
        int num = queue.size();
        // 新元素先入队列
        queue.offer(x);
        // 将旧元素依次入队再出队，新元素就在了队首
        for (int i = 0; i < num; i++) {
            queue.offer(queue.poll());
        }
    }

    public int pop() {
        return queue.poll();
    }

    public int top() {
        return queue.peek();
    }

    public boolean empty() {
        return queue.isEmpty();
    }
}
